home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 June: Reference Library / Dev.CD Jun 96 RL / Dev.CD Jun 96 RL.toast / Technical Documentation / develop / develop Issue 24 / develop Issue 24 code / Scriptable Database 1.0a15 / Foundation / AbstractDesignator.cp < prev    next >
Encoding:
Text File  |  1996-02-19  |  4.4 KB  |  112 lines  |  [TEXT/CWIE]

  1.  
  2. #include "AbstractDesignator.h"
  3.  
  4. //========================================================================================
  5. // CLASS TAbstractDesignator
  6. //========================================================================================
  7.  
  8. #pragma segment ObjectResident
  9. ImplementSmallClassData(TAbstractDesignator, clDesignator);
  10.  
  11. #pragma segment Foundation
  12.  
  13. //----------------------------------------------------------------------------------------
  14. // TAbstractDesignator::~TAbstractDesignator: 
  15. //----------------------------------------------------------------------------------------
  16. TAbstractDesignator::~TAbstractDesignator()
  17.     {
  18.     if(ObjectOfDesignation())
  19.         ObjectOfDesignation()->DisposeDesignator();
  20.     } // TAbstractDesignator::~TAbstractDesignator 
  21.  
  22. //----------------------------------------------------------------------------------------
  23. // TAbstractDesignator::IAbstractDesignator: 
  24. //----------------------------------------------------------------------------------------
  25. void TAbstractDesignator::IAbstractDesignator(TAbstractScriptableObject* objectOfDesignation)
  26.     {
  27.     fObjectOfDesignation = objectOfDesignation == nil ? nil : objectOfDesignation->CloneDesignator();
  28.     
  29.     TAbstractScriptableObject::IAbstractScriptableObject();
  30.     } // TAbstractDesignator::IAbstractDesignator 
  31.  
  32. //----------------------------------------------------------------------------------------
  33. // TAbstractDesignator::IsDesignator: 
  34. //----------------------------------------------------------------------------------------
  35. Boolean TAbstractDesignator::IsDesignator()
  36.     {
  37.     return true;
  38.     } // TAbstractDesignator::IsDesignator 
  39.  
  40. //----------------------------------------------------------------------------------------
  41. // TAbstractDesignator::DisposeDesignator
  42. //----------------------------------------------------------------------------------------
  43. void TAbstractDesignator::DisposeDesignator()
  44.     {
  45.     ASSERT(fReferenceCount >= 0);
  46.     if(fReferenceCount == 0)
  47.         delete this;
  48.     else
  49.         --fReferenceCount;
  50.     }
  51.     
  52. //----------------------------------------------------------------------------------------
  53. // TAbstractDesignator::CloneDesignator
  54. //----------------------------------------------------------------------------------------
  55. TAbstractScriptableObject* TAbstractDesignator::CloneDesignator()
  56.     {
  57.     ++fReferenceCount;
  58.     
  59.     return this;
  60.     }
  61.  
  62. //----------------------------------------------------------------------------------------
  63. // TAbstractDesignator::CloneOwnedObjects
  64. //----------------------------------------------------------------------------------------
  65. void TAbstractDesignator::CloneOwnedObjects()
  66.     {
  67.     if(this->fObjectOfDesignation != nil)
  68.         this->fObjectOfDesignation = this->fObjectOfDesignation->CloneDesignator();
  69.     fReferenceCount = 0;
  70.     
  71.     Inherited::CloneOwnedObjects();
  72.     }
  73.     
  74. //----------------------------------------------------------------------------------------
  75. // TAbstractDesignator::ParentObject: 
  76. //----------------------------------------------------------------------------------------
  77. TAbstractScriptableObject* TAbstractDesignator::ParentObject(const TAETransaction&)
  78.     {
  79.     return this->ObjectOfDesignation() ? this->ObjectOfDesignation()->CloneDesignator() : nil;
  80.     } // TAbstractDesignator::ParentObject 
  81.  
  82. //----------------------------------------------------------------------------------------
  83. // TAbstractDesignator::DelegateProperty: 
  84. //
  85. // If a designator returns 'true' for some property, then that property will be
  86. // delegated to the designator's object of designation
  87. //----------------------------------------------------------------------------------------
  88. Boolean TAbstractDesignator::DelegateProperty(DescType /*propertyIdentifier*/)
  89.     {
  90.     return false;
  91.     } // TAbstractDesignator::DelegateProperty
  92.  
  93. //----------------------------------------------------------------------------------------
  94. // TAbstractDesignator::AccessByProperty: 
  95. //----------------------------------------------------------------------------------------
  96. TAbstractScriptableObject* TAbstractDesignator::AccessByProperty(const TAETransaction& t, DescType propertyIdentifier)
  97.     {
  98.     TAbstractScriptableObject* propertyObject = nil;
  99.     
  100.     //
  101.     // Ask the object of designation for a property if 'DelegateProperty' returns true
  102.     //
  103.     if((this->ObjectOfDesignation() != nil) && (this->DelegateProperty(propertyIdentifier)))
  104.         {
  105.         propertyObject = this->ObjectOfDesignation()->AccessByProperty(t, propertyIdentifier);
  106.         }
  107.     else
  108.         propertyObject = Inherited::AccessByProperty(t, propertyIdentifier);
  109.     
  110.     return propertyObject;
  111.     } // TAbstractDesignator::AccessByProperty
  112.